package com.alibaba.dubbo.dynamic.service;

import com.alibaba.dubbo.common.bytecode.ClassGenerator;
import com.alibaba.dubbo.config.spring.ServiceBean;
import javassist.ClassPool;
import javassist.LoaderClassPath;

import java.net.URLClassLoader;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by wuyu on 2016/8/5.
 */
public interface DynamicExportService {

    /**
     * @param jars           远程jar包
     * @param id             bean id
     * @param iFaceClazzName 接口全名
     * @param implClazzName  实现类全名
     * @param group          所属组
     * @param version        服务版本
     * @param timeout        服务超时
     * @param filter         dubbo过滤器
     * @param <T>
     * @return
     */
    public <T> Map<String, Object> export(String[] jars, String id, String iFaceClazzName,
                                          String implClazzName, String group, String version, Integer timeout, String filter);

    /**
     * @param jars     远程jar包
     * @param services id    bean id
     *                 iFaceClazzName 接口全名
     *                 implClazzName 实现类全名
     *                 group 所属组
     *                 version 服务版本
     *                 timeout 服务超时
     *                 filter 过滤器
     * @param <T>
     * @return
     */
    public <T> Map<String, Object> export(String[] jars, Map<String, Map<String, Object>> services);

    /**
     * @param code java code
     */
    public void compile(String code);

    /**
     * 列出所有动态注册bean
     *
     * @return
     */
    public List<Map<String, Object>> listDynamicBean();

    /**
     * 卸载服务
     *
     * @param ids bean id
     */
    public void unexport(List<String> ids);
}
